//package pl;
import java.util.Map;
import java.util.Iterator;
import java.util.HashMap;

/* Tipo basado en el material de las clases de Terence Parr:
http://www.cs.usfca.edu/~parrt/course/652/lectures/symtab-solution-3.html
 */
class TablaSimbolos {

    TablaSimbolos padre = null;
    Simbolo simboloPadre = null;
    int num;
    HashMap<String, Simbolo> simbolos = new HashMap<String, Simbolo>();


    public TablaSimbolos(TablaSimbolos padre, Simbolo simboloPadre) {
        this.padre = padre;
        this.simboloPadre = simboloPadre;
        num = 0;
        if (padre != null) {
            num = padre.num + 1;
        }

    }

    public TablaSimbolos pop() {
        return padre;
    }

    public Simbolo nuevoSimbolo(String nombre, int varMetodoClase, int intDouble) {
        Simbolo s = new Simbolo(nombre, varMetodoClase, intDouble,this);
        simbolos.put(nombre, s);
        return s;
    }

    public Simbolo busca(String nombre) {
        Simbolo s = simbolos.get(nombre);
        if (s != null) {
            return s;  
        }
        if (padre != null) {
            return padre.busca(nombre);
        }
        return null; 
    }

    public boolean existe(String nombre) {
        return simbolos.get(nombre) != null;
    }

    public boolean Emprat(String nombre) {
        return busca(nombre).emprat;
    }

    public int getNum() {
        return num;
    }

    public void pintaSimbolos() {

        Iterator i = simbolos.entrySet().iterator();
        while (i.hasNext()) {
            Map.Entry me = (Map.Entry) i.next();
            System.out.println("La key: " + me.getKey() + "  " + me.getValue());
        }

    }

    public String obtinNom(String nombre){

     String tornada="";
     Simbolo s = busca(nombre);
     TablaSimbolos ts = s.tabla;

     while(ts!=null){
         if(ts.simboloPadre!=null){
             tornada = ts.simboloPadre.nombre + tornada;
         } else {
             tornada+= "_";
         }
         ts = ts.padre;
     }
     return(tornada + nombre);
    }
    

}
